package com.itheima.case2.service.impl;

import com.itheima.case2.dao.UserMapper;
import com.itheima.case2.pojo.po.User;
import com.itheima.case2.pojo.vo.AddUser;
import com.itheima.case2.pojo.vo.PageResult;
import com.itheima.case2.pojo.vo.QueryPageBean;
import com.itheima.case2.pojo.vo.UpdateUser;
import com.itheima.case2.service.UserService;
import com.itheima.case2.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserServiceImpl implements UserService {
    //1.查询用户
    @Override
    public PageResult queryUser(QueryPageBean pb) {
        //1.获取会话对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.获取代理接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //3.调用代理接口的方法
        List<User> list= mapper.queryUserByPage(pb);
        //4.使用接口代理对象调用方法查询用户表的所有行记录数
        long count= mapper.queryAllByPage();
        //5.将查询的数据封装到查询结果PageResult实体类中
        PageResult pageResult = new PageResult(count, list);
        //4.释放资源
        session.close();
        //5.将结果返回给web层
        return pageResult;
    }

    //2.修改用户信息
    @Override
    public void updateUser(UpdateUser user) {
        //1.获取会话对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.获取代理接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //3.调用代理接口中的更新用户信息方法
        mapper.updateUser(user);
        //3.1调用删除用户id的方法
        mapper.deleteUserById(user.getId());
        //3.2调用插入新数据的方法
        mapper.insertUser(user.getId(),user.getRoleIds());
        //4.释放资源
        session.close();
    }
    //3.添加用户
    @Override
    public void addUser(AddUser user) {

            //1.获取会话对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.获取代理接口
            UserMapper mapper = session.getMapper(UserMapper.class);
            //3.调用代理接口的方法
            mapper.addUsers(user);
            //4.在t_user_role添加该用户的角色信息
            mapper.insertUser(user.getId(),user.getRoleIds());

            //5.释放资源
         session.close();


    }
    //4.删除用户
    @Override
    public void deleteById(String uid) {
        //1.获取会话对象
        SqlSession session = SqlSessionUtil.getSession();
        //2.获取会话对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //3.类型转换
        int id = Integer.parseInt(uid);
        //4.调用接口中删除中间表用户id的方法
        //        1). 因为外键约束的存在,先删除中间表中的数据 t_user_role
        mapper.deleteUserById(id);
        //5.调用接口中删除用户表中用户id的方法
        //        2). 再删除t_user
        mapper.deleteUser(id);
        //6.释放资源
        session.close();
    }
}
